# -*- coding: UTF-8 -*-
from django.core import template_loader
from django.core.extensions import DjangoContext as Context
from django.core.exceptions import Http404
from django.models.comments import comments, karma
from django.utils.httpwrappers import HttpResponse

def vote(request, comment_id, vote):
    """
    Permet de juger un commentaire (+1 ou -1)

    Modèles : `karma_vote_accepted`
    Contexte :
        comment
            L'objet `comments.comments` que l'on juge
    """
    rating = {'up': 1, 'down': -1}.get(vote, False)
    if not rating:
        raise Http404, "Vote invalide"
    if request.user.is_anonymous():
        raise Http404, "Les utilisateurs anonymes n'ont pas le droit de voter"
    try:
        comment = comments.get_object(id__exact=comment_id)
    except comments.CommentDoesNotExist:
        raise Http404, "L'identifiant du commentaire que vous avez spécifié est invalide"
    if comment.user_id == request.user.id:
        raise Http404, "Vous ne pouvez pas voter pour vous-même"
    karma.vote(request.user.id, comment_id, rating)
    # On charge à nouveau le commentaire pour nous assurer que son score est à jour
    comment = comments.get_object(id__exact=comment_id)
    t = template_loader.get_template('comments/karma_vote_accepted')
    c = Context(request, {
        'comment': comment
    })
    return HttpResponse(t.render(c))
